#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 修改主窗口标题
    this->setWindowTitle("简单的记事本");
    // 获取到菜单栏
    QMenuBar* menuBar = this->menuBar();
    // 添加菜单
    QMenu* menu = new QMenu("文件");
    menuBar->addMenu(menu);
    // 添加菜单项
    QAction* action1 = new QAction("打开");
    QAction* action2 = new QAction("保存");
    menu->addAction(action1);
    menu->addAction(action2);

    // 指定一个输入框
    edit = new QPlainTextEdit();
    // 设置输入框文字大小
    QFont font;
    font.setPixelSize(20);
    edit->setFont(font);
    this->setCentralWidget(edit);

    // 连接QAction的信号槽，处理文件操作
    connect(action1, &QAction::triggered, this, &MainWindow::handlerAction1);
    connect(action2, &QAction::triggered, this, &MainWindow::handlerAction2);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handlerAction1()
{
    // 打开文件的操作
    // 1、先弹出一个打开文件的对话框，让用户选择要打开哪一个文件
    QString file_name = QFileDialog::getOpenFileName(this, "请选择要打开的文件");
    // 2、把文件显示到状态栏里
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(file_name); // 添加到状态栏里
    // 3、正式打开文件，根据用户选择的路径，构造一个QFile对象，打开文件
    QFile file(file_name);
    bool ret = file.open(QIODevice::ReadOnly); // 以只读方式打开文件
    if (!ret) {
        // 打开文件失败!
        statusBar->showMessage("打开文件: " + file_name + "失败!!");
        return;
    }
    // 4、读取文件
    QString content = file.readAll(); // 读取文件所有内容
    // 5、关闭文件
    file.close();
    // 6、江都到的内容设置到输入框当中
    edit->setPlainText(content);
}

void MainWindow::handlerAction2()
{
    // 1、弹出一个保存文件的对话框
    QString file_name = QFileDialog::getSaveFileName(this);
    // 2、在状态栏中显示这个文件名
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(file_name);
    // 3、以写方式打开文件
    QFile file(file_name);
    bool ret = file.open(QIODevice::WriteOnly);
    if (!ret) {
        // 打开文件失败
        statusBar->showMessage("打开文件: " + file_name + "失败!!!");
        return;
    }
    // 4、获取文本框内容，并写入文件
    const QString& content = edit->toPlainText();
    // 写入文件
    file.write(content.toUtf8());
    // 关闭文件
    file.close();
}

